Code goes beyond McNeall et al. (2022) “Constraining the carbon cycle in JULES-ES-1.0”, in order to inform a new ensemble of UKESM.

0.1 Failure analysis

1 Visualising the ensemble range

It’s important to remember that the design of the experiment is multiplication factors of the original parameters. This might be important for the “hold” value in a sensitivity analysis, as the “standard” value and the median value of the ensemble will not be the same.

1.1 Wave00/Wave01 Ensemble behaviour in key (constraining) outputs.

Global mean for the 20 years at the end of the 20th Century. There is still a significant low bias on cVeg output.

1.2 What proportion of wave01 fall within Andy Wiltshire’s constraints?

Just under a third. Points at a significant model discrepency in cVeg

Of the 400 members of the wave01 ensemble, 128 pass Andy Wiltshire’s Level 2 constraints.

[1] 128
[1] 0.32

1.3 Constraining to level 2 with the emulator

[1] 12.252

1.4 Adding further constraints

2 First, cumulative NBP

LS0tCnRpdGxlOiAiQ29uc3RyYWluaW5nIHRoZSBjYXJib24gY3ljbGUgaW4gSlVMRVMtRVMtMS4wIHRvIGluZm9ybSBVS0VTTSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIHRvY19kZXB0aDogMgogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKLS0tCgoKQ29kZSBnb2VzIGJleW9uZCBNY05lYWxsIGV0IGFsLiAoMjAyMikgIkNvbnN0cmFpbmluZyB0aGUgY2FyYm9uIGN5Y2xlIGluIEpVTEVTLUVTLTEuMCIsIGluIG9yZGVyIHRvIGluZm9ybSBhIG5ldyBlbnNlbWJsZSBvZiBVS0VTTS4KCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cyA9ICdoaWRlJ30KIyBMb2FkIGhlbHBlciBmdW5jdGlvbnMKCmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcucGF0aCA9ICJmaWdzLyIsIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5ncyA9IEZBTFNFKQoKCmBgYAoKYGBge3J9Cgpzb3VyY2UoIkpVTEVTLUVTLTFwMC1jb21tb24tcGFja2FnZXMuUiIpCnNvdXJjZSgiSlVMRVMtRVMtMXAwLWNvbW1vbi1mdW5jdGlvbnMuUiIpCnNvdXJjZSgiSlVMRVMtRVMtMXAwLWNvbW1vbi1kYXRhLlIiKQoKYGBgCgojIyBGYWlsdXJlIGFuYWx5c2lzCgpgYGB7ciBmYWlsdXJlLXBhaXJzLCBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTIsIGZpZy5wYXRoPSdmaWdzLycsIGRldj1jKCdwbmcnLCAncGRmJyl9CgoKbG93X25wcF9peCA8LSB3aGljaChZWywnbnBwX25saW1fbG5kX3N1bSddIDwgMWU1KQojIGNvZGUgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODE4Mjg3Mi9ob3ctdG8tdXNlLWRpZmZlcmVudC1zZXRzLW9mLWRhdGEtaW4tbG93ZXItYW5kLXVwcGVyLXBhbmVsLW9mLXBhaXJzLWZ1bmN0aW9uLWluCgoKI1ggPC0gbWF0cml4KHJ1bmlmKDMwMCksIG5jb2w9MykKI1kgPC0gbWF0cml4KGMoc29ydChydW5pZigxMDAsIDAsIDEwKSksIAojICAgICAgICAgICAgICBzb3J0KHJ1bmlmKDEwMCwgMCwgMTApKSwgCiMgICAgICAgICAgICAgIHNvcnQocnVuaWYoMTAwLCAwLCAxMCkpKSwgbmNvbD0zKQoKI3BkZihmaWxlID0gJ2ZpZ3MvZmlnMDIucGRmJywgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTApCiNwZGYoZmlsZSA9ICdmaWdzL3J1bi1mYWlsdXJlLXBhaXJzLnBkZicsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQp4MSA8LSBYW2xvd19ucHBfaXgsIF0KeDIgPC0gWF9ubGV2ZWwwCgpYWSA8LSByYmluZCh4MSwgeDIpCgoKcGFpcnMoWFksCiAgICAgIGxvd2VyLnBhbmVsPWZ1bmN0aW9uKHgsIHksIC4uLikgewogICAgICAgIFh4IDwtIHhbc2VxX2xlbihucm93KHgxKSldICMgY29ycmVzcG9uZHMgdG8gWCBzdWJzZXQKICAgICAgICBYeSA8LSB5W3NlcV9sZW4obnJvdyh4MSkpXSAjIGNvcnJlc3BvbmRzIHRvIFggc3Vic2V0CiAgICAgICAgI3VzciA8LSBwYXIoInVzciIpOyBvbi5leGl0KHBhcih1c3IpKQogICAgICAgICNwYXIodXNyID0gYyhyYW5nZSh4MVssIC1uY29sKHgxKV0pLCByYW5nZSh4MVssIC0xXSkpKSAjIHNldCB1cCBsaW1pdHMKICAgICAgICBwb2ludHMoWHgsIFh5LCBjb2wgPSB6Ymx1ZSwgcGNoID0gMTksIGNleCA9IDAuOCkKICAgICAgICMgaWYocGFyKCdtZmcnKVsyXSA9PSAxKSBheGlzKDIpICMgaWYgbGVmdCBwbG90LCBhZGQgbGVmdCBheGlzCiAgICAgICAgI2lmKHBhcignbWZnJylbMV0gPT0gbmNvbCh4MSkpIGF4aXMoMSkgIyBpZiBib3R0b20gcGxvdCBhZGQgYm90dG9tIGF4aXMKICAgICAgfSwgCiAgICAgIHVwcGVyLnBhbmVsPWZ1bmN0aW9uKHgsIHksIC4uLikgewogICAgICAgIFl4IDwtIHhbKG5yb3coeDEpICsgMSk6bGVuZ3RoKHgpXSAjIFkgc3Vic2V0CiAgICAgICAgWXkgPC0geVsobnJvdyh4MSkgKyAxKTpsZW5ndGgoeSldICMgWSBzdWJzZXQKICAgICAgICAKICAgICAgICAjY250ciA8LSBvdXRlcihZeCwgWXgsIEZVTj0nKicpICMgYXJiaXRyYXJ5IGZ1bmN0aW9uIGZvciBjb250b3VyCiAgICAgICAjIHVzciA8LSBwYXIoInVzciIpOyBvbi5leGl0KHBhcih1c3IpKQogICAgICAgICNwYXIodXNyID0gYyhyYW5nZSh4MlssIC0xXSksIHJhbmdlKHgyWywgLW5jb2woeDIpXSkpKSAjIHNldCB1cCBsaW1pdHMKICAgICAgICBwb2ludHMoWXgsIFl5LCBjb2wgPSB6cmVkLCBwY2ggPSAxOSwgY2V4ID0gMC44KQogICAgICAgICNjb250b3VyKFl4LCBZeSwgY250ciwgYWRkPVRSVUUpCiAgICAgICAgI2lmKHBhcignbWZnJylbMl0gPT0gbmNvbCh4MikpIGF4aXMoNCkgIyBpZiByaWdodCBwbG90LCBhZGQgcmlnaHQgYXhpcwogICAgICAgICNpZihwYXIoJ21mZycpWzFdID09IDEpIGF4aXMoMykgIyBpZiB0b3AgcGxvdCwgYWRkIHRvcCBheGlzCiAgICAgIH0sIAogICAgICAjdGljaz1GQUxTRSwgIyBzdXBwcmVzcyB0aGUgZGVmYXVsdCB0aWNrIG1hcmtzCiAgICAgICNsaW5lPTEsCiAgICAgIGdhcCA9IDAsCiAgICAgIHhsaW0gPSBjKDAsMSksIHlsaW0gPSBjKDAsMSksCiAgICAgIGxhYmVscyA9IDE6ZCwKICAgICAgb21hID0gYygyLCAxOCwgMiwgMikpICMgbW92ZSB0aGUgZGVmYXVsdCB0aWNrIGxhYmVscyBvZmYgdGhlIHBsb3QgCgpyZXNldCgpCgpsZWdlbmQoJ2xlZnQnLCBsZWdlbmQgPSBwYXN0ZSgxOmQsIGNvbG5hbWVzKGxocykpLCBjZXggPSAxLjEsIGJ0eSA9ICduJykKbGVnZW5kKCd0b3BsZWZ0JywgcGNoID0gMTksIGNvbCA9IGMoIHpyZWQsIHpibHVlKSwgbGVnZW5kID0gYygnZmFpbGVkJywgJ3plcm8gY2FyYm9uIGN5Y2xlJyksIGJ0eSA9ICduJywgaW5zZXQgPSAwLjAyLCBjZXggPSAxLjEgKQoKI2Rldi5vZmYKCmBgYAoKIyBWaXN1YWxpc2luZyB0aGUgZW5zZW1ibGUgcmFuZ2UKCkl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGRlc2lnbiBvZiB0aGUgZXhwZXJpbWVudCBpcyBtdWx0aXBsaWNhdGlvbiBmYWN0b3JzIG9mIHRoZSBvcmlnaW5hbCBwYXJhbWV0ZXJzLiBUaGlzIG1pZ2h0IGJlIGltcG9ydGFudCBmb3IgdGhlICJob2xkIiB2YWx1ZSBpbiBhIHNlbnNpdGl2aXR5IGFuYWx5c2lzLCBhcyB0aGUgInN0YW5kYXJkIiB2YWx1ZSBhbmQgdGhlIG1lZGlhbiB2YWx1ZSBvZiB0aGUgZW5zZW1ibGUgd2lsbCBub3QgYmUgdGhlIHNhbWUuCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmhlaWdodCA9IDh9CgojcGRmKGZpbGUgPSAnZmlncy9saHNfcmFuZ2UuI3BkZicsIHdpZHRoID0gNiwgaGVpZ2h0ID0gOCkKI3BkZihmaWxlID0gJ2ZpZ3MvZmlnMDEucGRmJywgd2lkdGggPSA2LCBoZWlnaHQgPSA4KQpwYXIobGFzID0gMSwgbWFyID0gYyg1LDgsMiwxKSkKbGhzX21pbiA8LSBhcHBseShsaHNfd2F2ZTBfd2F2ZTAxX2FsbCwgMiwgbWluKQpsaHNfbWF4IDwtIGFwcGx5KGxoc193YXZlMF93YXZlMDFfYWxsLDIsIG1heCkKCnBsb3QobGhzX21heCwgMTpkLCB0eXBlID0gJ24nLCB4bGltID0gYygwLDEwKSwgYXhlcyA9IEZBTFNFLCB4bGFiID0gJ211bHRpcGx5aW5nIGZhY3RvcicsIHlsYWIgPSAnJykKCmFibGluZSh2ID0gMCwgbHR5ID0gJ2Rhc2hlZCcsIGNvbCA9ICdncmV5JykKYWJsaW5lKHYgPSAxLCBsdHkgPSAnZGFzaGVkJywgY29sID0gJ3RvbWF0bzInKQoKc2VnbWVudHMoeDAgPSBsaHNfbWluLCB5MCA9IDE6ZCwgeDEgPSBsaHNfbWF4LCB5MSA9IDE6ZCApCnBvaW50cyhsaHNfbWluLCAxOmQsIHBjaCA9IDIwKQpwb2ludHMobGhzX21heCwgMTpkLCBwY2ggPSAyMCkKYXhpcygyLCBhdCA9IDE6ZCwgbGFiZWxzID0gY29sbmFtZXMobGhzKSkKYXhpcygxKQojZGV2Lm9mZgoKYGBgCgojIyBXYXZlMDAvV2F2ZTAxICBFbnNlbWJsZSBiZWhhdmlvdXIgaW4ga2V5IChjb25zdHJhaW5pbmcpIG91dHB1dHMuIAoKR2xvYmFsIG1lYW4gZm9yIHRoZSAyMCB5ZWFycyBhdCB0aGUgZW5kIG9mIHRoZSAyMHRoIENlbnR1cnkuIFRoZXJlIGlzIHN0aWxsIGEgc2lnbmlmaWNhbnQgbG93IGJpYXMgb24gY1ZlZyBvdXRwdXQuCgpgYGB7ciwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDh9CndhdmUwMGNvbCA8LSAnc2t5Ymx1ZTInCndhdmUwMWNvbCA8LSAndG9tYXRvMicKCndhdmUwMGNvbCA8LSAnZG9kZ2VyYmx1ZTInCndhdmUwMWNvbCA8LSAnZmlyZWJyaWNrJwpyYW5nZWNvbCA8LSAnZ3JleScKYGBgCgoKYGBge3IsIGZpZy53aWR0aCA9IDgsIGZpZy5oZWlnaHQgPSA4IH0KIyBIaXN0b2dyYW0gb2YgbGV2ZWwgMSBjb25zdHJhaW50cwpoY29sID0gJ2RhcmtncmV5JwpsY29sID0gJ2JsYWNrJwoKI3BkZihmaWxlID0gJ2ZpZ3MvZmlnMDUucGRmJywgd2lkdGggPSA4LCBoZWlnaHQgPSA4KQojcGRmKGZpbGUgPSAnZmlncy9sZXZlbF8yX2NvbnN0cmFpbnRzX2hpc3RzLnBkZicsIHdpZHRoID0gOCwgaGVpZ2h0ID0gOCkKcGFyKG1mcm93ID0gYygyLDIpLCBmZyA9ICdkYXJrZ3JleScsIGxhcyA9IDEsIG9tYSA9IGMoMC4xLCAwLjEsIDQsIDAuMSkpCgp0cnVuYyA8LSBmdW5jdGlvbih4LCB2ZWMpewogIAogIGRhdCA8LSB4W3ggPCBtYXgodmVjKSAmIHggPiBtaW4odmVjKSAgXQogIAogIGRhdAogIAp9CgoKaCA8LSBoaXN0KFlfY29uc3RfbGV2ZWwxYV9zY2FsZWRbLCduYnBfbG5kX3N1bSddLCBtYWluID0gJ05CUCcsIHhsYWIgPSAnR3RDL3llYXInLCBjb2wgPSBtYWtlVHJhbnNwYXJlbnQod2F2ZTAwY29sLDE1MCkpCmhpc3QodHJ1bmMoWV9jb25zdF93YXZlMDFfc2NhbGVkIFssJ25icF9sbmRfc3VtJ10sIGgkYnJlYWtzKSAsCiAgICAgY29sID0gbWFrZVRyYW5zcGFyZW50KHdhdmUwMWNvbCwxNTApICwgYnJlYWtzID0gaCRicmVha3MsIGFkZCA9IFRSVUUpCgpydWcoWV9jb25zdF9zdGFuX3NjYWxlZFsnbmJwX2xuZF9zdW0nXSwgbHdkID0gMikKCnBvbHlnb24oeCA9IGMoMCwgMTAwLCAxMDAsIDApLCB5ID0gYygwLCAwLCAxMDAwLCAxMDAwKSwKICAgICAgICBjb2wgPSBtYWtlVHJhbnNwYXJlbnQocmFuZ2Vjb2wsIDYwKSwKICAgICAgICBib3JkZXIgPSBtYWtlVHJhbnNwYXJlbnQocmFuZ2Vjb2wpKQoKaCA8LSBoaXN0KFlfY29uc3RfbGV2ZWwxYV9zY2FsZWRbLCducHBfbmxpbV9sbmRfc3VtJ10sY29sID0gbWFrZVRyYW5zcGFyZW50KHdhdmUwMGNvbCwxNTApLCBtYWluID0gJ05QUCcsIHhsYWIgPSAnR3RDL3llYXInKQpoaXN0KHRydW5jKFlfY29uc3Rfd2F2ZTAxX3NjYWxlZCBbLCducHBfbmxpbV9sbmRfc3VtJ10sIGgkYnJlYWtzKSAsIAogICAgIGNvbCA9IG1ha2VUcmFuc3BhcmVudCh3YXZlMDFjb2wpICwgYnJlYWtzID0gaCRicmVha3MsIGFkZCA9IFRSVUUpCgpydWcoWV9jb25zdF9zdGFuX3NjYWxlZFsnbnBwX25saW1fbG5kX3N1bSddLCBsd2QgPSAyKQoKcG9seWdvbih4ID0gYygzNSwgODAsIDgwLCAzNSksIHkgPSBjKDAsIDAsIDEwMDAsIDEwMDApLAogICAgICAgIGNvbCA9IG1ha2VUcmFuc3BhcmVudChyYW5nZWNvbCwgNjApLAogICAgICAgIGJvcmRlciA9IG1ha2VUcmFuc3BhcmVudChyYW5nZWNvbCkpCgoKaCA8LSBoaXN0KFlfY29uc3RfbGV2ZWwxYV9zY2FsZWRbLCdjU29pbF9sbmRfc3VtJ10sIGNvbCA9IG1ha2VUcmFuc3BhcmVudCh3YXZlMDBjb2wsMTUwKSwgbWFpbiA9ICdTb2lsIENhcmJvbicsIHhsYWIgPSAnR3RDJykKaGlzdCh0cnVuYyhZX2NvbnN0X3dhdmUwMV9zY2FsZWQgWywnY1NvaWxfbG5kX3N1bSddLCBoJGJyZWFrcykgLCAKICAgICBjb2wgPSBtYWtlVHJhbnNwYXJlbnQod2F2ZTAxY29sLDE1MCkgLCBicmVha3MgPSBoJGJyZWFrcywgYWRkID0gVFJVRSkKCnJ1ZyhZX2NvbnN0X3N0YW5fc2NhbGVkWydjU29pbF9sbmRfc3VtJ10sIGx3ZCA9IDIpCgpwb2x5Z29uKHggPSBjKDc1MCwgMzAwMCwgMzAwMCwgNzUwKSwgeSA9IGMoMCwgMCwgMTAwMCwgMTAwMCksCiAgICAgICAgY29sID0gbWFrZVRyYW5zcGFyZW50KHJhbmdlY29sLCA2MCksCiAgICAgICAgYm9yZGVyID0gbWFrZVRyYW5zcGFyZW50KHJhbmdlY29sKSkKCmggPC0gaGlzdChZX2NvbnN0X2xldmVsMWFfc2NhbGVkWywnY1ZlZ19sbmRfc3VtJ10sIGNvbCA9IG1ha2VUcmFuc3BhcmVudCh3YXZlMDBjb2wsMTUwKSwgbWFpbiA9ICdWZWdldGF0aW9uIENhcmJvbicsIHhsYWIgPSAnR3RDJykKaGlzdCh0cnVuYyhZX2NvbnN0X3dhdmUwMV9zY2FsZWQgWywnY1ZlZ19sbmRfc3VtJ10sIGgkYnJlYWtzKSAsIAogICBjb2wgPSBtYWtlVHJhbnNwYXJlbnQod2F2ZTAxY29sLDE1MCkgICwgYnJlYWtzID0gaCRicmVha3MsIGFkZCA9IFRSVUUpCgpydWcoWV9jb25zdF9zdGFuX3NjYWxlZFsnY1ZlZ19sbmRfc3VtJ10sIGx3ZCA9IDIpCgpwb2x5Z29uKHggPSBjKDMwMCwgODAwLCA4MDAsIDMwMCksIHkgPSBjKDAsIDAsIDEwMDAsIDEwMDApLAogICAgICAgIGNvbCA9IG1ha2VUcmFuc3BhcmVudChyYW5nZWNvbCwgNjApLAogICAgICAgYm9yZGVyID0gIG1ha2VUcmFuc3BhcmVudChyYW5nZWNvbCkpCgoKCnJlc2V0KCkKCmxlZ2VuZCgndG9wJywgaG9yaXogPSBUUlVFLCBmaWxsID0gYyhtYWtlVHJhbnNwYXJlbnQod2F2ZTAwY29sLCAxNTApLCBtYWtlVHJhbnNwYXJlbnQod2F2ZTAxY29sLCAxNTApLCBtYWtlVHJhbnNwYXJlbnQocmFuZ2Vjb2wsIDYwKSksIGxlZ2VuZCA9IGMoJ1dhdmUwMCcsICdXYXZlMDEnLCAnQVcgcmFuZ2UnKSkKCiNkZXYub2ZmCmBgYAoKIyMgV2hhdCBwcm9wb3J0aW9uIG9mIHdhdmUwMSBmYWxsIHdpdGhpbiBBbmR5IFdpbHRzaGlyZSdzIGNvbnN0cmFpbnRzPwoKSnVzdCB1bmRlciBhIHRoaXJkLiBQb2ludHMgYXQgYSBzaWduaWZpY2FudCBtb2RlbCBkaXNjcmVwZW5jeSBpbiBjVmVnCgpPZiB0aGUgNDAwIG1lbWJlcnMgb2YgdGhlIHdhdmUwMSBlbnNlbWJsZSwgMTI4IHBhc3MgQW5keSBXaWx0c2hpcmUncyBMZXZlbCAyIGNvbnN0cmFpbnRzLgoKYGBge3J9CgpsZW5ndGgobGV2ZWwyX2l4X3dhdmUwMSkKbGVuZ3RoKGxldmVsMl9peF93YXZlMDEpIC8gbnRyYWluX3dhdmUwMQoKCmBgYAoKCgpgYGB7ciBwbG90LWNhcmJvbi1jeWNsZS10aW1lc2VyaWVzLXByaW1hcnksIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gMTJ9CgpsY29sX3dhdmUwIDwtIG1ha2VUcmFuc3BhcmVudCgnZG9kZ2VyYmx1ZTInLCAgMTIwKQpsY29sX3dhdmUwMSA8LSBtYWtlVHJhbnNwYXJlbnQoJ2ZpcmVicmljaycsICAxMjApCmxjb2xfd2F2ZTAxX2xldmVsMiA8LSAnZ29sZCcKc3RhbmNvbCA9ICdibGFjaycKCmxpbmVQbG90TXVsdGlFbnMgPC0gZnVuY3Rpb24oeWVhcnMsIGVuczEsIGVuczIsIGVuczMsIGNvbDEsIGNvbDIsIGNvbDMsIHlsYWIsIG1haW4sIHlsaW0gPSBOVUxMKXsKICAjIFBsb3Qgd2F2ZTAwIGFuZCB3YXZlMDEgdGltZXNlcmllcyBvbiB0b3Agb2Ygb25lIGFub3RoZXIKICAKICBudCA8LSBsZW5ndGgoeWVhcnMpIAogIGlmKGlzLm51bGwoeWxpbSkpewogICAgCiAgeWxpbSA9IHJhbmdlKGMoZW5zMVssMV0sIGVuczFbLG50XSwgZW5zMlssMV0sIGVuczJbICxudF0sIGVuczNbLDFdLCBlbnMzWywgbnRdKSkKICB9CiAgCiAgZWxzZSB5bGltIDwtIHlsaW0KICAKICBtYXRwbG90KHllYXJzLCB0KGVuczEpLCB0eXBlID0gJ2wnLCBsdHkgPSAnc29saWQnLHlsaW0gPSB5bGltLCBjb2wgPSBjb2wxLAogICAgICAgIHlsYWIgPSB5bGFiLCBtYWluID0gbWFpbiwgeGxhYiA9ICcnLAogICAgICAgIGJ0eSA9ICduJykKICBtYXRsaW5lcyh5ZWFycywgdChlbnMyKSwgY29sID0gY29sMiwgbHR5ID0gJ3NvbGlkJykKICAgIG1hdGxpbmVzKHllYXJzLCB0KGVuczMpLCBjb2wgPSBjb2wzLCBsdHkgPSAnc29saWQnKQp9CgojcGRmKGZpbGUgPSAnZmlncy9maWcwMy5wZGYnLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxMikKI3BkZihmaWxlID0gJ2ZpZ3MvY2FyYm9uLWN5Y2xlLXRpbWVzZXJpZXMtd2F2ZXMtY29uc3RyYWluZWQucGRmJywgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMTIpCnBhcihtZnJvdz0gYygzLDUpLCBsYXMgPSAxLCBtYXIgPSBjKDQsNCwxLDApKQoKbGluZVBsb3RNdWx0aUVucyh5ZWFycyA9IHllYXJzLCBlbnMxID0gbnBwX2Vuc193YXZlMDBbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDAsXSwKICAgICAgICAgICAgICAgICBlbnMyID0gbnBwX2Vuc193YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gbnBwX2Vuc193YXZlMDFbbGV2ZWwyYV9peF93YXZlMDEsIF0sCiAgICAgICAgICAgICAgICAgY29sMSA9IGxjb2xfd2F2ZTAsIGNvbDIgPSBsY29sX3dhdmUwMSwgY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJ0d0QycsIG1haW4gPSAnTlBQJykKCmxpbmVzKHllYXJzLG5wcF9zdGFuLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQoKbGluZVBsb3RNdWx0aUVucyh5ZWFycyA9IHllYXJzLCBlbnMxID0gIG5icF9lbnNfd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sIAogICAgICAgICAgICAgICAgIGVuczIgPSBuYnBfZW5zX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBuYnBfZW5zX3dhdmUwMVtsZXZlbDJhX2l4X3dhdmUwMSwgXSwKICAgICAgICAgICAgICAgICBjb2wxID0gbGNvbF93YXZlMCwgY29sMiA9IGxjb2xfd2F2ZTAxLGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICdHdEMnLCBtYWluID0gJ05CUCcsIHlsaW0gPSBjKC0xMCwxMCkpCgpsaW5lcyh5ZWFycywgbmJwX3N0YW4sIGNvbCA9IHN0YW5jb2wsIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDIpCgpsaW5lUGxvdE11bHRpRW5zKHllYXJzID0geWVhcnMsIGVuczEgPSBjU29pbF9lbnNfd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGNTb2lsX2Vuc193YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gY1NvaWxfZW5zX3dhdmUwMVtsZXZlbDJhX2l4X3dhdmUwMSwgXSwKICAgICAgICAgICAgICAgICBjb2wxID0gbGNvbF93YXZlMCwgY29sMiA9IGxjb2xfd2F2ZTAxLCBjb2wzID0gbGNvbF93YXZlMDFfbGV2ZWwyLAogICAgICAgICAgICAgICAgIHlsYWIgPSAnR3RDJywgbWFpbiA9ICdjU29pbCcsIHlsaW0gPSByYW5nZShjKGNTb2lsX2Vuc193YXZlMDBbLDFdLCBjU29pbF9lbnNfd2F2ZTAwWywxNjRdKSkpCgpsaW5lcyh5ZWFycywgY1NvaWxfc3RhbiwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IGNWZWdfZW5zX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLAogICAgICAgICAgICAgICAgIGVuczIgPSBjVmVnX2Vuc193YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gY1ZlZ19lbnNfd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICdHdEMnLCBtYWluID0gJ2NWZWcnKQoKbGluZXMoeWVhcnMsIGNWZWdfc3RhbiwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IGxhaV9sbmRfbWVhbl9lbnNfd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGxhaV9sbmRfbWVhbl9lbnNfd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IGxhaV9sbmRfbWVhbl9lbnNfd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICdHdEMnLCBtYWluID0gJ0xhaScpCgpsaW5lcyh5ZWFycywgbGFpX2xuZF9tZWFuX3N0YW4sIGNvbCA9IHN0YW5jb2wsIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDIpCgpsaW5lUGxvdE11bHRpRW5zKHllYXJzID0geWVhcnMsIGVuczEgPSByaF9sbmRfc3VtX2Vuc193YXZlMDBbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDAsXSwKICAgICAgICAgICAgICAgICBlbnMyID0gcmhfbG5kX3N1bV9lbnNfd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IHJoX2xuZF9zdW1fZW5zX3dhdmUwMVtsZXZlbDJhX2l4X3dhdmUwMSwgXSwKICAgICAgICAgICAgICAgICBjb2wxID0gbGNvbF93YXZlMCwgY29sMiA9IGxjb2xfd2F2ZTAxLCAgY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJ0d0QycsIG1haW4gPSAnUkgnKQoKbGluZXMoeWVhcnMsIHJoX2xuZF9zdW1fc3RhbiwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IGZMdWNfbG5kX3N1bV9lbnNfd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGZMdWNfbG5kX3N1bV9lbnNfd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IGZMdWNfbG5kX3N1bV9lbnNfd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICdHdEMnLCBtYWluID0gJ2ZMdWMnKQoKbGluZXMoeWVhcnMsIGZMdWNfbG5kX3N1bV9zdGFuLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQoKbGluZVBsb3RNdWx0aUVucyh5ZWFycyA9IHllYXJzLCBlbnMxID0gZkhhcnZlc3RfbG5kX3N1bV9lbnNfd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGZIYXJ2ZXN0X2xuZF9zdW1fZW5zX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBmSGFydmVzdF9sbmRfc3VtX2Vuc193YXZlMDFbbGV2ZWwyYV9peF93YXZlMDEsIF0sCiAgICAgICAgICAgICAgICAgY29sMSA9IGxjb2xfd2F2ZTAsIGNvbDIgPSBsY29sX3dhdmUwMSwgY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJ0d0QycsIG1haW4gPSAnZkhhcnZlc3QnKQoKbGluZXMoeWVhcnMsIGZIYXJ2ZXN0X2xuZF9zdW1fc3RhbiwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IHRyZWVGcmFjX2xuZF9tZWFuX2Vuc193YXZlMDBbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDAsXSwKICAgICAgICAgICAgICAgICBlbnMyID0gdHJlZUZyYWNfbG5kX21lYW5fZW5zX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSB0cmVlRnJhY19sbmRfbWVhbl9lbnNfd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICclJywgbWFpbiA9ICd0cmVlZnJhYycKICAgICAgICAgICAgICAgICApCgpsaW5lcyh5ZWFycywgdHJlZUZyYWNfbG5kX21lYW5fc3RhbiwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IHNocnViRnJhY19sbmRfbWVhbl9lbnNfd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IHNocnViRnJhY19sbmRfbWVhbl9lbnNfd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IHNocnViRnJhY19sbmRfbWVhbl9lbnNfd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICclJywgbWFpbiA9ICdzaHJ1YmZyYWMnCikKCmxpbmVzKHllYXJzLCBzaHJ1YkZyYWNfbG5kX21lYW5fc3RhbiwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IGJhcmVzb2lsRnJhY19sbmRfbWVhbl9lbnNfd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGJhcmVzb2lsRnJhY19sbmRfbWVhbl9lbnNfd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IGJhcmVzb2lsRnJhY19sbmRfbWVhbl9lbnNfd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICclJywgbWFpbiA9ICdiYXJlc29pbGZyYWMnKQoKbGluZXMoeWVhcnMsIGJhcmVzb2lsRnJhY19sbmRfbWVhbl9zdGFuLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQoKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgYzNQZnRGcmFjX2xuZF9tZWFuX2Vuc193YXZlMDBbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDAsXSwKICAgICAgICAgICAgICAgICBlbnMyID0gYzNQZnRGcmFjX2xuZF9tZWFuX2Vuc193YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gYzNQZnRGcmFjX2xuZF9tZWFuX2Vuc193YXZlMDFbbGV2ZWwyYV9peF93YXZlMDEsIF0sCiAgICAgICAgICAgICAgICAgY29sMSA9IGxjb2xfd2F2ZTAsIGNvbDIgPSBsY29sX3dhdmUwMSwgY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJyUnLCBtYWluID0gJ2MzUGZ0RnJhYycpCgpsaW5lcyh5ZWFycywgYzNQZnRGcmFjX2xuZF9tZWFuX3N0YW4sIGNvbCA9IHN0YW5jb2wsIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDIpCgoKbGluZVBsb3RNdWx0aUVucyh5ZWFycyA9IHllYXJzLCBjNFBmdEZyYWNfbG5kX21lYW5fZW5zX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLAogICAgICAgICAgICAgICAgIGVuczIgPSBjNFBmdEZyYWNfbG5kX21lYW5fZW5zX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBjNFBmdEZyYWNfbG5kX21lYW5fZW5zX3dhdmUwMVtsZXZlbDJhX2l4X3dhdmUwMSwgXSwKICAgICAgICAgICAgICAgICBjb2wxID0gbGNvbF93YXZlMCwgY29sMiA9IGxjb2xfd2F2ZTAxLCBjb2wzID0gbGNvbF93YXZlMDFfbGV2ZWwyLAogICAgICAgICAgICAgICAgIHlsYWIgPSAnJScsIG1haW4gPSAnYzNQZnRGcmFjJykKCmxpbmVzKHllYXJzLCBjNFBmdEZyYWNfbG5kX21lYW5fc3RhbiwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCgpyZXNldCgpCgpsZWdlbmQoJ2JvdHRvbXJpZ2h0JywgbGVnZW5kID0gYygnd2F2ZTAwJywnd2F2ZTAxJywnd2F2ZTAxIGxldmVsMicsJ3N0YW5kYXJkJyksIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDEuNSwgY29sID0gYyhsY29sX3dhdmUwLCBsY29sX3dhdmUwMSwgbGNvbF93YXZlMDFfbGV2ZWwyLCBzdGFuY29sKSwgaW5zZXQgPSBjKDAuMDUsIDAuMTUpICkKCiNkZXYub2ZmCmBgYApgYGB7ciwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSAxMn0KCiNwZGYoZmlsZSA9ICdmaWdzL2ZpZzA0LnBkZicsIHdpZHRoID0gMTAsIGhlaWdodCA9IDEyKQojcGRmKGZpbGUgPSAnZmlncy9jYXJib24tY3ljbGUtdGltZXNlcmllcy1hbm9tYWx5LXdhdmVzLWNvbnN0cmFpbmVkLnBkZicsIHdpZHRoID0gMTAsIGhlaWdodCA9IDEyKQpwYXIobWZyb3c9IGMoMyw1KSwgbGFzID0gMSwgbWFyID0gYyg0LDQsMSwwKSkKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IG5wcF9lbnNfYW5vbV93YXZlMDBbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDAsXSwKICAgICAgICAgICAgICAgICBlbnMyID0gbnBwX2Vuc19hbm9tX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBucHBfZW5zX2Fub21fd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICdHdEMnLCBtYWluID0gJ05QUCcpCgpsaW5lcyh5ZWFycyxucHBfc3Rhbl9hbm9tLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQpsaW5lUGxvdE11bHRpRW5zKHllYXJzID0geWVhcnMsIGVuczEgPSAgbmJwX2Vuc19hbm9tX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLCAKICAgICAgICAgICAgICAgICBlbnMyID0gbmJwX2Vuc19hbm9tX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBuYnBfZW5zX2Fub21fd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJ0d0QycsIG1haW4gPSAnTkJQJywgeWxpbSA9IGMoLTEwLDEwKSkKCmxpbmVzKHllYXJzLCBuYnBfc3Rhbl9hbm9tLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQoKbGluZVBsb3RNdWx0aUVucyh5ZWFycyA9IHllYXJzLCBlbnMxID0gY1NvaWxfZW5zX2Fub21fd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGNTb2lsX2Vuc19hbm9tX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBjU29pbF9lbnNfYW5vbV93YXZlMDFbbGV2ZWwyYV9peF93YXZlMDEsIF0sCiAgICAgICAgICAgICAgICAgY29sMSA9IGxjb2xfd2F2ZTAsIGNvbDIgPSBsY29sX3dhdmUwMSwgY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJ0d0QycsIG1haW4gPSAnY1NvaWwnLCB5bGltID0gcmFuZ2UoYyhjU29pbF9lbnNfYW5vbV93YXZlMDBbLDFdLCBjU29pbF9lbnNfYW5vbV93YXZlMDBbLDE2NF0pKSkKCmxpbmVzKHllYXJzLCBjU29pbF9zdGFuX2Fub20sIGNvbCA9IHN0YW5jb2wsIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDIpCgpsaW5lUGxvdE11bHRpRW5zKHllYXJzID0geWVhcnMsIGVuczEgPSBjVmVnX2Vuc19hbm9tX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLAogICAgICAgICAgICAgICAgIGVuczIgPSBjVmVnX2Vuc19hbm9tX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBjVmVnX2Vuc19hbm9tX3dhdmUwMVtsZXZlbDJhX2l4X3dhdmUwMSwgXSwKICAgICAgICAgICAgICAgICBjb2wxID0gbGNvbF93YXZlMCwgY29sMiA9IGxjb2xfd2F2ZTAxLCBjb2wzID0gbGNvbF93YXZlMDFfbGV2ZWwyLAogICAgICAgICAgICAgICAgIHlsYWIgPSAnR3RDJywgbWFpbiA9ICdjVmVnJykKCmxpbmVzKHllYXJzLCBjVmVnX3N0YW5fYW5vbSwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IGxhaV9sbmRfbWVhbl9lbnNfYW5vbV93YXZlMDBbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDAsXSwKICAgICAgICAgICAgICAgICBlbnMyID0gbGFpX2xuZF9tZWFuX2Vuc19hbm9tX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBsYWlfbG5kX21lYW5fZW5zX2Fub21fd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICdHdEMnLCBtYWluID0gJ0xhaScpCgpsaW5lcyh5ZWFycywgbGFpX2xuZF9tZWFuX3N0YW5fYW5vbSwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IHJoX2xuZF9zdW1fZW5zX2Fub21fd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IHJoX2xuZF9zdW1fZW5zX2Fub21fd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IHJoX2xuZF9zdW1fZW5zX2Fub21fd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsICBjb2wzID0gbGNvbF93YXZlMDFfbGV2ZWwyLAogICAgICAgICAgICAgICAgIHlsYWIgPSAnR3RDJywgbWFpbiA9ICdSSCcpCgpsaW5lcyh5ZWFycywgcmhfbG5kX3N1bV9zdGFuX2Fub20sIGNvbCA9IHN0YW5jb2wsIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDIpCgpsaW5lUGxvdE11bHRpRW5zKHllYXJzID0geWVhcnMsIGVuczEgPSBmTHVjX2xuZF9zdW1fZW5zX2Fub21fd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGZMdWNfbG5kX3N1bV9lbnNfYW5vbV93YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gZkx1Y19sbmRfc3VtX2Vuc19hbm9tX3dhdmUwMVtsZXZlbDJhX2l4X3dhdmUwMSwgXSwKICAgICAgICAgICAgICAgICBjb2wxID0gbGNvbF93YXZlMCwgY29sMiA9IGxjb2xfd2F2ZTAxLCBjb2wzID0gbGNvbF93YXZlMDFfbGV2ZWwyLAogICAgICAgICAgICAgICAgIHlsYWIgPSAnR3RDJywgbWFpbiA9ICdmTHVjJykKCmxpbmVzKHllYXJzLCBmTHVjX2xuZF9zdW1fc3Rhbl9hbm9tLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQogCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IGZIYXJ2ZXN0X2xuZF9zdW1fZW5zX2Fub21fd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGZIYXJ2ZXN0X2xuZF9zdW1fZW5zX2Fub21fd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IGZIYXJ2ZXN0X2xuZF9zdW1fZW5zX2Fub21fd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICdHdEMnLCBtYWluID0gJ2ZIYXJ2ZXN0JykKCmxpbmVzKHllYXJzLCBmSGFydmVzdF9sbmRfc3VtX3N0YW5fYW5vbSwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9IHRyZWVGcmFjX2xuZF9tZWFuX2Vuc19hbm9tX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLAogICAgICAgICAgICAgICAgIGVuczIgPSB0cmVlRnJhY19sbmRfbWVhbl9lbnNfYW5vbV93YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gdHJlZUZyYWNfbG5kX21lYW5fZW5zX2Fub21fd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICclJywgbWFpbiA9ICd0cmVlZnJhYycKICAgICAgICAgICAgICAgICApCgpsaW5lcyh5ZWFycywgdHJlZUZyYWNfbG5kX21lYW5fc3Rhbl9hbm9tLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQoKbGluZVBsb3RNdWx0aUVucyh5ZWFycyA9IHllYXJzLCBlbnMxID0gc2hydWJGcmFjX2xuZF9tZWFuX2Vuc19hbm9tX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLAogICAgICAgICAgICAgICAgIGVuczIgPSBzaHJ1YkZyYWNfbG5kX21lYW5fZW5zX2Fub21fd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IHNocnViRnJhY19sbmRfbWVhbl9lbnNfYW5vbV93YXZlMDFbbGV2ZWwyYV9peF93YXZlMDEsIF0sCiAgICAgICAgICAgICAgICAgY29sMSA9IGxjb2xfd2F2ZTAsIGNvbDIgPSBsY29sX3dhdmUwMSwgY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJyUnLCBtYWluID0gJ3NocnViZnJhYycKKQoKbGluZXMoeWVhcnMsIHNocnViRnJhY19sbmRfbWVhbl9zdGFuX2Fub20sIGNvbCA9IHN0YW5jb2wsIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDIpCgpsaW5lUGxvdE11bHRpRW5zKHllYXJzID0geWVhcnMsIGVuczEgPSBiYXJlc29pbEZyYWNfbG5kX21lYW5fZW5zX2Fub21fd2F2ZTAwW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAwLF0sCiAgICAgICAgICAgICAgICAgZW5zMiA9IGJhcmVzb2lsRnJhY19sbmRfbWVhbl9lbnNfYW5vbV93YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gYmFyZXNvaWxGcmFjX2xuZF9tZWFuX2Vuc19hbm9tX3dhdmUwMVtsZXZlbDJhX2l4X3dhdmUwMSwgXSwKICAgICAgICAgICAgICAgICBjb2wxID0gbGNvbF93YXZlMCwgY29sMiA9IGxjb2xfd2F2ZTAxLCBjb2wzID0gbGNvbF93YXZlMDFfbGV2ZWwyLAogICAgICAgICAgICAgICAgIHlsYWIgPSAnJScsIG1haW4gPSAnYmFyZXNvaWxmcmFjJykKCmxpbmVzKHllYXJzLCBiYXJlc29pbEZyYWNfbG5kX21lYW5fc3Rhbl9hbm9tLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQoKCmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgYzNQZnRGcmFjX2xuZF9tZWFuX2Vuc19hbm9tX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLAogICAgICAgICAgICAgICAgIGVuczIgPSBjM1BmdEZyYWNfbG5kX21lYW5fZW5zX2Fub21fd2F2ZTAxW3dpdGhvdXRfb3V0bGllcnNfaXhfd2F2ZTAxLF0sCiAgICAgICAgICAgICAgICAgZW5zMyA9IGMzUGZ0RnJhY19sbmRfbWVhbl9lbnNfYW5vbV93YXZlMDFbbGV2ZWwyYV9peF93YXZlMDEsIF0sCiAgICAgICAgICAgICAgICAgY29sMSA9IGxjb2xfd2F2ZTAsIGNvbDIgPSBsY29sX3dhdmUwMSwgY29sMyA9IGxjb2xfd2F2ZTAxX2xldmVsMiwKICAgICAgICAgICAgICAgICB5bGFiID0gJyUnLCBtYWluID0gJ2MzUGZ0RnJhYycpCgpsaW5lcyh5ZWFycywgYzNQZnRGcmFjX2xuZF9tZWFuX3N0YW5fYW5vbSwgY29sID0gc3RhbmNvbCwgbHR5ID0gJ3NvbGlkJywgbHdkID0gMikKCgpsaW5lUGxvdE11bHRpRW5zKHllYXJzID0geWVhcnMsIGM0UGZ0RnJhY19sbmRfbWVhbl9lbnNfYW5vbV93YXZlMDBbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDAsXSwKICAgICAgICAgICAgICAgICBlbnMyID0gYzRQZnRGcmFjX2xuZF9tZWFuX2Vuc19hbm9tX3dhdmUwMVt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMSxdLAogICAgICAgICAgICAgICAgIGVuczMgPSBjNFBmdEZyYWNfbG5kX21lYW5fZW5zX2Fub21fd2F2ZTAxW2xldmVsMmFfaXhfd2F2ZTAxLCBdLAogICAgICAgICAgICAgICAgIGNvbDEgPSBsY29sX3dhdmUwLCBjb2wyID0gbGNvbF93YXZlMDEsIGNvbDMgPSBsY29sX3dhdmUwMV9sZXZlbDIsCiAgICAgICAgICAgICAgICAgeWxhYiA9ICclJywgbWFpbiA9ICdjM1BmdEZyYWMnKQoKbGluZXMoeWVhcnMsIGM0UGZ0RnJhY19sbmRfbWVhbl9zdGFuX2Fub20sIGNvbCA9IHN0YW5jb2wsIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDIpCgpyZXNldCgpCgpsZWdlbmQoJ2JvdHRvbXJpZ2h0JywgbGVnZW5kID0gYygnd2F2ZTAwJywnd2F2ZTAxJywnd2F2ZTAxIGxldmVsMicsJ3N0YW5kYXJkJyksIGx0eSA9ICdzb2xpZCcsIGx3ZCA9IDEuNSwgY29sID0gYyhsY29sX3dhdmUwLCBsY29sX3dhdmUwMSwgbGNvbF93YXZlMDFfbGV2ZWwyLCBzdGFuY29sKSwgaW5zZXQgPSBjKDAuMDUsIDAuMTUpICkKCgojZGV2Lm9mZgoKYGBgIAoKCiMjIENvbnN0cmFpbmluZyB0byBsZXZlbCAyIHdpdGggdGhlIGVtdWxhdG9yCgoKCmBgYHtyfQpudW5pZiA8LSA1MDAwMApYX3VuaWYgPC0gc2FtcF91bmlmKG51bmlmLCBtaW5zID0gcmVwKDAsMzIpLCBtYXhlcyA9IHJlcCgxLCAzMikpCmNvbG5hbWVzKFhfdW5pZikgPC0gY29sbmFtZXMoWCkKYGBgCgoKCmBgYHtyfQoKIyBDYW4gdGhpcyBnbyBpbiBjb21tb24gZGF0YT8gV291bGQgYmUgbmVlZGVkIGZvciBjaGVja2luZyBlbXVsYXRvciBmaXRzCiMgQ3JlYXRlIGZpdCBsaXN0cyBmb3IgdGhlIGNvbWJpbmVkIGRhdGEgd2F2ZTAwIGxldmVsIDFhIGFuZCB3YXZlMDEKWV9jb25zdF9sZXZlbDFhX3dhdmUwMV9zY2FsZWRfbGlzdCA8LSBtYXQybGlzdChZX2NvbnN0X2xldmVsMWFfd2F2ZTAxX3NjYWxlZCkKCmZpdF9saXN0X2NvbnN0X2xldmVsMWFfd2F2ZTAxIDwtIG1jbGFwcGx5KFggPSBZX2NvbnN0X2xldmVsMWFfd2F2ZTAxX3NjYWxlZF9saXN0ICwgRlVOID0ga20sIGZvcm11bGEgPSB+LiwgZGVzaWduID0gWF9sZXZlbDFhX3dhdmUwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYy5jb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KHRyYWNlID0gRkFMU0UpKQoKCmBgYAoKCmBgYHtyfQoKWV9jb25zdF9sZXZlbDFhX3dhdmUwMV9zY2FsZWRfcHJlZCA8LSBtdWx0aVByZWQoWSA9IFlfY29uc3RfbGV2ZWwxYV93YXZlMDFfc2NhbGVkLCBYcHJlZCA9IFhfdW5pZiwgZml0X2xpc3QgPSBmaXRfbGlzdF9jb25zdF9sZXZlbDFhX3dhdmUwMSkKCmBgYAoKCgpgYGB7cn0KCgpsZXZlbDJfaXhfZW1fdW5pZl93YXZlMDBfd2F2ZTAxIDwtIHdoaWNoKFlfY29uc3RfbGV2ZWwxYV93YXZlMDFfc2NhbGVkX3ByZWQkcHJlZF9tZWFuWywnbmJwX2xuZF9zdW0nXSA+IDAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWV9jb25zdF9sZXZlbDFhX3dhdmUwMV9zY2FsZWRfcHJlZCRwcmVkX21lYW5bLCducHBfbmxpbV9sbmRfc3VtJ10gPiAzNSAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWV9jb25zdF9sZXZlbDFhX3dhdmUwMV9zY2FsZWRfcHJlZCRwcmVkX21lYW5bLCducHBfbmxpbV9sbmRfc3VtJ10gPCA4MCAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZX2NvbnN0X2xldmVsMWFfd2F2ZTAxX3NjYWxlZF9wcmVkJHByZWRfbWVhblssJ2NTb2lsX2xuZF9zdW0nXSA+IDc1MCAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZX2NvbnN0X2xldmVsMWFfd2F2ZTAxX3NjYWxlZF9wcmVkJHByZWRfbWVhblssJ2NTb2lsX2xuZF9zdW0nXSA8IDMwMDAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWV9jb25zdF9sZXZlbDFhX3dhdmUwMV9zY2FsZWRfcHJlZCRwcmVkX21lYW5bLCdjVmVnX2xuZF9zdW0nXSA+IDMwMCAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWV9jb25zdF9sZXZlbDFhX3dhdmUwMV9zY2FsZWRfcHJlZCRwcmVkX21lYW5bLCdjVmVnX2xuZF9zdW0nXSA8IDgwMAopCgoKKGxlbmd0aChsZXZlbDJfaXhfZW1fdW5pZl93YXZlMDBfd2F2ZTAxKSAvIG51bmlmKSAqIDEwMAoKYGBgCgoKYGBge3J9Clhfc3Rhbl9ub3JtIDwtIG5vcm1hbGl6ZShtYXRyaXgocmVwKDEsIDMyKSwgbnJvdyA9IDEpLCB3cnQgPSBsaHMpCgpjb2xuYW1lcyhYX3VuaWYpIDwtIDE6MzIKCmBgYAoKCmBgYHtyLGZpZy53aWR0aCA9IDEyLCBmaWcuaGVpZ2h0ID0gMTIsIHdhcm5pbmcgPSBGQUxTRX0KCiNwZGYoZmlsZSA9ICdmaWdzL2ZpZzA2LnBkZicsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEyKQojcGRmKGZpbGUgPSAnZmlncy9wYWlyc19sZXZlbDJfaXhfZW1fdW5pZl93YXZlMDBfd2F2ZTAxLnBkZicsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEyKQoKcGFyKG9tYSA9IGMoMCwwLDAsMyksIGJnID0gJ3doaXRlJykKCnBhbmVsX2hpc3RfbG9jYWwgPC0gZnVuY3Rpb24oeCwgLi4uKQp7CiAgICB1c3IgPC0gcGFyKCJ1c3IiKTsgb24uZXhpdChwYXIodXNyKSkKICAgIHBhcih1c3IgPSBjKHVzclsxOjJdLCAwLCAxLjUpICkKICAgIGggPC0gaGlzdCh4LCBwbG90ID0gRkFMU0UpCiAgICBicmVha3MgPC0gaCRicmVha3M7IG5CIDwtIGxlbmd0aChicmVha3MpCiAgICB5IDwtIGgkY291bnRzOyB5IDwtIHkvbWF4KHkpCiAgICByZWN0KGJyZWFrc1stbkJdLCAwLCBicmVha3NbLTFdLCB5LCBjb2wgPSAiY3lhbiIsIC4uLikKfQoKcGFpcnMocmJpbmQoWF91bmlmW2xldmVsMl9peF9lbV91bmlmX3dhdmUwMF93YXZlMDEsIF0sIFhfc3Rhbl9ub3JtKSwKICAgICAgZ2FwID0gMCwgbG93ZXIucGFuZWwgPSBOVUxMLCB4bGltID0gYygwLDEpLCB5bGltID0gYygwLDEpLAogICAgICBwYW5lbCA9IGRmdW5jX3VwX3RydXRoLAogICAgICBkaWFnLnBhbmVsID0gcGFuZWxfaGlzdF9sb2NhbCwKICAgICAgY2V4LmxhYmVscyA9IDEsCiAgICAgIGNvbC5heGlzID0gJ3doaXRlJywKICAgICAgZGZ1bmNfY29sID0gcmIKICAgICAgKQoKCmltYWdlLnBsb3QobGVnZW5kLm9ubHkgPSBUUlVFLAogICAgICAgICAgIHpsaW0gPSBjKDAsMSksCiAgICAgICAgICAgY29sID0gcmIsCiAgICAgICAgICAgbGVnZW5kLmFyZ3MgPSBsaXN0KHRleHQgPSAnRGVuc2l0eSBvZiBtb2RlbCBydW5zIG1hdGNoaW5nIHRoZSBjcml0ZXJpYScsIHNpZGUgPSAzLCBsaW5lID0gMSksCiAgICAgICAgICAgbGVnZW5kLnNocmluayA9IDAuNiwKICAgICAgICAgICBob3Jpem9udGFsID0gVFJVRQopCgpsZWdlbmQoJ2xlZnQnLCBsZWdlbmQgPSBwYXN0ZSgxOjMyLCBjb2xuYW1lcyhsaHMpKSwgY2V4ID0gMSwgYnR5ID0gJ24nKQoKI2Rldi5vZmYKYGBgCiMjIEFkZGluZyBmdXJ0aGVyIGNvbnN0cmFpbnRzCgojIEZpcnN0LCBjdW11bGF0aXZlIE5CUAoKYGBge3J9CmxpbmVQbG90TXVsdGlFbnMoeWVhcnMgPSB5ZWFycywgZW5zMSA9ICBuYnBfZW5zX3dhdmUwMFt3aXRob3V0X291dGxpZXJzX2l4X3dhdmUwMCxdLCAKICAgICAgICAgICAgICAgICBlbnMyID0gbmJwX2Vuc193YXZlMDFbd2l0aG91dF9vdXRsaWVyc19peF93YXZlMDEsXSwKICAgICAgICAgICAgICAgICBlbnMzID0gbmJwX2Vuc193YXZlMDFbbGV2ZWwyYV9peF93YXZlMDEsIF0sCiAgICAgICAgICAgICAgICAgY29sMSA9IGxjb2xfd2F2ZTAsIGNvbDIgPSBsY29sX3dhdmUwMSxjb2wzID0gbGNvbF93YXZlMDFfbGV2ZWwyLAogICAgICAgICAgICAgICAgIHlsYWIgPSAnR3RDJywgbWFpbiA9ICdOQlAnLCB5bGltID0gYygtMTAsMTApKQoKbGluZXMoeWVhcnMsIG5icF9zdGFuLCBjb2wgPSBzdGFuY29sLCBsdHkgPSAnc29saWQnLCBsd2QgPSAyKQoKCmBgYAoKCgoKCgoK